<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            padding-bottom: 800px;
            padding-left: 30px;
        }

        .msg-box {
            position: fixed;
            left: 50%;
            top: 10px;
            background-color: rgba(0, 0, 0, 0.8);
            color: white;
            padding: 6px 20px;
            transform: translate(-50%, 0px);
            border-radius: 6px;
            box-shadow: 0 0 2px #333;
        }
    </style>
</head>

<body>
    <input type="button" value="tip" onclick="showTip()">
    <input type="button" value="tip" onclick="showTip2('自定义消息')">

    <hr>
    <!-- <div class="msg-box">消息</div> -->
    <script type="module">
        // 加载 Vue3 的ESM 模块文件
        import { createApp, createVNode, render } from "../assets/vue3/vue.esm-browser.js"
        // createApp = 1、创建vue实例和虚拟DOM； 2、基于虚拟DOM构建页面真实结构DOM 3、将结构到写入到页面指定位置
        //                createVNode              render                           写入到页面中

        // createVNode(options)  options 配置等同于 createApp 的配置
        //      + 使用createVNode 时 必须提供 template 属性的模板定义
        let vnode = createVNode({
            template: `
                <div>{{ msg }}</div>
                <input type="text" v-model="msg">
            `,
            data() {
                return {
                    msg: "msg数据变量"
                }
            },
        })
        console.log(vnode);

        // render(vnodeOption,domBox) 
        //      vnodeOption 是 createVNode 创建的虚拟dom节点数据
        //      domBox 指定创建的真实DOM的存储容器
        let box = document.createDocumentFragment();
        render(vnode, box);
        document.body.appendChild(box)

        // 封装提示框
        function msssage(msg = "默认消息") {
            let msgVnode = createVNode({
                template: `<div class="msg-box">{{ msg }}</div>`,
                data() {
                    return {
                        msg
                    }
                },
                mounted() {
                    setTimeout(() => {
                        document.body.removeChild(this.$el)
                    }, 3000)
                },
            })
            let box = document.createDocumentFragment();
            render(msgVnode, box);
            document.body.appendChild(box)

        }

        window.msssage = msssage;
    </script>
    <script>
        function showTip() {
            window.msssage()
        }
        function showTip2(msg) {
            window.msssage(msg)
        }
    </script>
</body>

</html>